public class StringInternTest {
    public static void main(String[] args) {
        String s = new String("1");//创建两个对象； 堆 和 字符串常量池。
        s.intern();//在执行这行代码之前，常量池中已经有了1，所以这行代码没有实际意义。
        String s2 = "1";//直接使用的字符串常量池中的1。
        System.out.println(s == s2); //jdk6: false 一个是堆的地址，一个是常量池中的地址，所以是false.


        //这里只创建了一个对象，也就是堆中的对象，字符串常量池中没有111。
        String s3 = new String("1") + new String("1");
        //将11放入字符串常量池中。 jdk7及以后，常量池放在了堆中，为了节省空间，在常量池中没有新建对象，而是存储了 堆中  对象的地址，
        s3.intern();
        //这里直接使用了字符串常量池中的地址
        String s4 = "11";
        System.out.println(s3 == s4);//jdk 6: false ||   jdk7: true
    }
}
